<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of DestinoDAO
 *
 * @author thales
 */
class DestinoDAO {
    public $conn = null;
    
    public function __construct() {
        $this->conn = DB::getConn();
    }
    
    /**
     * Método responsávelpor inserir um novo destino.
     * 
     * @param destinoVO $objDestino
     * @return boolean 
     */
    public function salvar(DestinoVO $objDestino){
        $sql = ' insert into destino (descricao) values (?)';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objDestino->getDescricao(), PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível salvar o destino!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $this->conn->lastInsertId(), __CLASS__);
        return true;
        
    }
    
    /**
     * Método responsávelpor alterar os dados do destino
     * 
     * @param DestinoVO $objDestino
     * @return boolean 
     */
    public function alterar(DestinoVO $objDestino){
        $sql = 'Update 
                    destino 
                set 
                    descricao = :descricao
                where
                    id = :id';
        
        $descricao = $objDestino->getDescricao();
        $id = $objDestino->getId();
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindParam(':descricao', $descricao);
        $stt->bindParam(':id', $id);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível alterar o destino!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objDestino->getId(), __CLASS__);
        
        return true;
        
    }
    
    /**
     * Método responsável por buscar todos os dados do destino.<br>
     * 
     * @param DestinoVO $objDestino
     * @return listaObjDestino Array
     */
    public function pesquisarDados(VendasBO $objDestinoBO){
        $sql = 'select * from destino where descricao like ?';
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objDestinoBO->getDestino()->getDescricao(),PDO::PARAM_STR);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados do destino!' . __METHOD__ );
        } 
       
        
        $listaObjDestinoBO = array();
        while( $tmp = $stt->fetch(PDO::FETCH_ASSOC) ){
            
            $objDestinoBO = new VendasBO();
            $objDestinoBO->getDestino()->setId($tmp['id']);
            $objDestinoBO->getDestino()->setDescricao($tmp['descricao']); 
            
            $listaObjDestinoBO[] = $objDestinoBO;
            
        }
        
        return $listaObjDestinoBO;
    }
    
    public function pesquisarTodos(){
        $sql = 'select * from destino';
        
        $stt = $this->conn->prepare($sql);  
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pesquisar os dados do destino!' . __METHOD__ );
        } 
       
        $listaObjDestinoBO = array();
        while( $tmp = $stt->fetch(PDO::FETCH_ASSOC) ){
            
            $objDestinoBO = new VendasBO();
            $objDestinoBO->getDestino()->setId($tmp['id']);
            $objDestinoBO->getDestino()->setDescricao($tmp['descricao']); 
            
            $listaObjDestinoBO[] = $objDestinoBO;
            
        }
        //var_dump($listaObjDestinoBO);die();
        return $listaObjDestinoBO;
    }
    
    /**
     * Método responsável por pegar os dados do destino.<br>
     * 
     * @param DestinoVO $objDestino
     * @return boolean 
     */
    public function pesquisar( VendasBO $objDestinoBO){
        $sql = 'select * from destino where id = ?';
        
        $stt = $this->conn->prepare($sql);  
        $stt->bindValue(1, $objDestinoBO->getDestino()->getId(),PDO::PARAM_INT);
        
        
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível pegar os dados do destino!' . __METHOD__ );
        } 

        $tmp = $stt->fetch(PDO::FETCH_ASSOC);
        
        $objDestinoBO->getDestino()->setId($tmp['id']);
        $objDestinoBO->getDestino()->setDescricao($tmp['descricao']);

        return true;   
    }
    
    /**
     * Método para excluir um destino do sistema.
     * 
     * @param DestinoVO $objDestino
     * @return boolean 
     */
    public function excluir(DestinoVO $objDestinoVO ){
        $sql = 'delete from destino where id = ?';
        
        $stt = $this->conn->prepare($sql);
        $stt->bindValue(1, $objDestinoVO->getId(), PDO::PARAM_INT);
        
        if ( !$stt->execute() ){
            throw new Exception('Não foi possível deletar o cliente!<br>' . var_dump($stt->errorInfo()) );
        } 
        
        LogDAO::getInstance()->salvar(__METHOD__, $objDestinoVO->getId(), __CLASS__);
        
        return true;
    }
}

?>
